#ifndef MUSICLIST_H
#define MUSICLIST_H
#include<QUrl>
#include<QVector>
#include<QSet>
#include"music.h"

/////////////////////////////////////////////////////////////////////////////////
//描述歌曲音乐列表(管理所有的音乐文件),方便组织管理,解析,分离音乐列表中的一个一个音乐文件/////
////////////////////////////////////////////////////////////////////////////////

typedef typename QVector<Music>::iterator iterator;     //把QVector<Music>类型的迭代器[iterator]重命名
class MusicList
{
public:
    MusicList();
    //通过音乐文件的Url路径为音乐列表添加音乐
    void addMusicByUrl(const QList<QUrl>& urls);

    //对于自定义类型,for循环语法糖底层都是通过迭代器方式进行实现的
    iterator begin();       //提供begin()方法获取musicList的迭代器(该迭代器类型是QVector<Music>类型的迭代器[iterator])
    iterator end();         //提供end()方法获取musicList的迭代器(该迭代器类型是QVector<Music>类型的迭代器[iterator])

    //通过歌曲Id获取对应的迭代器
    iterator findMusicById(QString musicId);
    //把歌曲列表里的歌曲信息写入数据库
    void writeToDB();
    //从数据库中读取歌曲信息写入歌曲列表
    void readFromDB();
private:
    QVector<Music> musicList;   //保存音乐
    QSet<QString> musicPaths;   //保存音乐对应的路径(哈希桶结构存储,查询效率很高)-->用于判断添加歌曲时该歌曲是否已经存在了(防止相同路径下的歌曲文件重复加载)
};

#endif // MUSICLIST_H
